import axios from 'axios'
import { ElMessage } from 'element-plus'
import store from '@/store'
import { isCheckTimeout } from './auth'

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 600000
})

//请求拦截器
service.interceptors.request.use((config) => {
  // 在这个位置统一注入token
  if (store.getters.token) {
    // 先检测token是否过期
    if (isCheckTimeout()) {
      //登出
      store.dispatch('user/logout')
      return console.log(Promise.reject(new Error('token 失效')))
    }
    //如果token存在，注入token
    config.headers.Authorization = store.getters.token
  }

  return config
})

//响应拦截器
service.interceptors.response.use(
  (response) => {
    const { success, message, status, data } = response.data
    //需要判断当前请求是否成功
    if (success) {
      return data
    } else {
      //业务错误
      if (status === 401) {
        store.dispatch('user/logout')
      }
      console.log(message)
      ElMessage.error(message) //提示错误消息
      return Promise.reject(new Error(message))
    }
  },
  (error) => {
    //这里要特殊处理一下，不然找不到status字段
    const theError = JSON.parse(JSON.stringify(error))
    if (theError && theError.status === 401) {
      store.dispatch('user/logout')
    }
    // console.log(theError)
    // ElMessage.error(error.message) // 提示错误信息
    return Promise.reject(error)
  }
)

export default service
